package com.uncp.comisiondeadmision.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import com.uncp.comisiondeadmision.util.entity.EDetallesolicitud;

public class DDetalleSolicitud implements IDDetalleSolicitud {

	private EntityManagerFactory emf;
	private EntityManager em;

	public void setEmf(EntityManagerFactory emf) {
		this.emf = emf;
	}

	@SuppressWarnings("unchecked")
	public List<EDetallesolicitud> consulDetalleXCodPostu(Integer cod,
			String estaApro, String estaPendi,String estaRecha,String estaDetaApro,
			String estaDetaRecha) throws Exception {

		em = emf.createEntityManager();

		List<EDetallesolicitud> lista = null;

		try {

			Query query = em
					.createQuery("select d from EDetallesolicitud d join "
							+ "  d.solicitud s where s.postulante.int_cod_postu=:codigo "
							+ " and s.str_estado not in(:estaPendi,:estaApro,:estaRecha) and d.str_detaSoli_estado not in(:estaDetaApro,:estaDetaRecha)");
			query.setParameter("codigo", cod);
			query.setParameter("estaPendi", estaPendi);
			query.setParameter("estaApro", estaApro);
			query.setParameter("estaRecha", estaRecha);
			query.setParameter("estaDetaApro", estaDetaApro);
			query.setParameter("estaDetaRecha", estaDetaRecha);

			lista = query.getResultList();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			em.close();
		}

		return lista;
	}

	public void registrarDetalleSolicitud(EDetallesolicitud entidad)
			throws Exception {
		System.out.println("registrarDetalleSolicitud");

		em = emf.createEntityManager();
		try {
			em.getTransaction().begin();

			em.persist(entidad);

		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			em.getTransaction().commit();
			em.close();
		}

	}

	public EDetallesolicitud buscarDetalleXFK(Integer codSoli, Integer codRequi)
			throws Exception {

		em = emf.createEntityManager();

		EDetallesolicitud EDetallesolicitud = null;
		try {

			Query query = em.createQuery("select d from EDetallesolicitud d "
					+ " where d.solicitud.int_nrosolicitud=:codSoli "
					+ " and d.requisito.int_codrequisito=:codRequi ");
			query.setParameter("codSoli", codSoli);
			query.setParameter("codRequi", codRequi);

			EDetallesolicitud = (EDetallesolicitud) query.getSingleResult();

		} catch (Exception e) {
			System.out.println(e.getMessage());
		} finally {
			em.close();
		}

		return EDetallesolicitud;
	}

	@SuppressWarnings("unchecked")
	public List<EDetallesolicitud> consulDetalleXCodSoli(Integer codSoli,
			String estado) throws Exception {

		em = emf.createEntityManager();

		List<EDetallesolicitud> lista = null;
		try {

			Query query = em
					.createQuery("select d from EDetallesolicitud d join d.solicitud s where "
							+ "  s.int_nrosolicitud=:codigo and s.str_estado not in(:estado) ");
			query.setParameter("codigo", codSoli);
			query.setParameter("estado", estado);

			lista = query.getResultList();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			em.close();
		}
		return lista;
	}

	public EDetallesolicitud buscarDetalleXPK(Integer codItem) throws Exception {

		em = emf.createEntityManager();
		EDetallesolicitud detalle = null;
		try {
			detalle = em.find(EDetallesolicitud.class, codItem);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			em.close();
		}
		return detalle;
	}

	public void actualizarDetalleSolicitud(EDetallesolicitud entidad)
			throws Exception {

		em = emf.createEntityManager();

		try {
			em.getTransaction().begin();

			em.merge(entidad);

		} catch (Exception e) {
			em.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			em.getTransaction().commit();
			em.close();
		}

	}

	@SuppressWarnings("unchecked")
	public List<EDetallesolicitud> consultaDetalleXPK(Integer item)
			throws Exception {

		em = emf.createEntityManager();
		List<EDetallesolicitud> listar = null;
		try {
			Query query = em
					.createQuery("select d from EDetallesolicitud d where d.int_detaSoli_id=:codigo");
			query.setParameter("codigo", item);
			listar = query.getResultList();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			em.close();
		}

		return listar;
	}

}
